/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.uoc.tdp.pac4.conexion;

import edu.uoc.tdp.pac4.comun.GestorConexionInterface;
import edu.uoc.tdp.pac4.beans.Perfil;
import edu.uoc.tdp.pac4.beans.Taller;
import edu.uoc.tdp.pac4.beans.Usuari;
import edu.uoc.tdp.pac4.cliente.Principal;
import static edu.uoc.tdp.pac4.cliente.Principal.setContentInternalFrame;

import java.awt.Color;
import javax.swing.JDesktopPane;

import javax.swing.JInternalFrame;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.JScrollPane;
import javax.swing.JLabel;
import edu.uoc.tdp.pac4.conexion.ImmutableTable;
import edu.uoc.tdp.pac4.i18n.TDSLanguageUtils;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.rmi.RemoteException;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author andres
 */
public class GestionConexionListUsuarios extends JInternalFrame {

    private GestorConexionInterface conexion;
    private JDesktopPane listUsersWindow;
    private JTable taulaUsuaris;
    private JScrollPane scrollTaula;
    private JLabel lbl_titol;
    private JButton btn_edit;
    private JButton btn_add;
    
    ArrayList<Usuari> llistaUsuaris;
    ArrayList<Perfil> llistaPerfils;
    ArrayList<Taller> llistaTallers;
    ArrayList<Usuari> resultatCerca;
      private JDesktopPane editUserWindow;
    private JLabel lbl_titol1;
    private JButton btn_update;
    private JButton btn_back;    
    private JButton btn_del;    

   private JButton btn_cercar;    
    
    private JComboBox combo_perfils;
    private JComboBox combo_tallers;
    
    
   JLabel lbl_nom = new JLabel(TDSLanguageUtils.getMessage("Users.Nombre"));                    ;
   JLabel lbl_usuari = new JLabel(TDSLanguageUtils.getMessage("Users.Usuario"));                    
   JLabel lbl_contrasenya1 = new JLabel(TDSLanguageUtils.getMessage("Users.Pass1"));                        
   JLabel lbl_contrasenya2 = new JLabel(TDSLanguageUtils.getMessage("Users.Pass2"));
   JLabel lbl_perfil = new JLabel(TDSLanguageUtils.getMessage("Users.Perfil"));                        
   JLabel lbl_taller = new JLabel(TDSLanguageUtils.getMessage("Users.Taller"));
   JLabel lbl_actiu = new JLabel(TDSLanguageUtils.getMessage("Users.Activo"));
   JLabel lbl_alta = new JLabel(TDSLanguageUtils.getMessage("Users.Alta"));                        
   JLabel lbl_modificacio = new JLabel(TDSLanguageUtils.getMessage("Users.Modificacion"));
   JLabel lbl_baixa = new JLabel(TDSLanguageUtils.getMessage("Users.Baja"));  

   JLabel showAlta ;
   JLabel showModificacio ;                        
   JLabel showBaixa ;
                        
   JTextField txt_nom;                    
   JTextField txt_usuari;
   JPasswordField txt_pass1;
   JPasswordField txt_pass2;    
    
   JTextField txt_cercar;
                        
   ImmutableTable model;                        
                        
    public GestionConexionListUsuarios(GestorConexionInterface conn) {


        
            conexion = conn;

        listUsersWindow=new JDesktopPane();
            
        lbl_titol = new JLabel(TDSLanguageUtils.getMessage("Users.Title"));
        lbl_titol.setForeground(Color.white);
        lbl_titol.setBounds(200, 40, 200, 40);
        combo_tallers = new JComboBox();
        
        /* Capçalera de la taula */
        
        final String[] capTaula = {TDSLanguageUtils.getMessage("Users.ID"),
                        TDSLanguageUtils.getMessage("Users.Nombre"),
                        TDSLanguageUtils.getMessage("Users.Perfil"),
                        TDSLanguageUtils.getMessage("Users.ActivoShort"),
                        TDSLanguageUtils.getMessage("Users.Borrado")};       
        
        
          
         model = new ImmutableTable(capTaula, 0);
         
        try {
           ArrayList<Usuari> llistaUsuaris = conexion.getLlistaUsuaris();
          
           for(int i = 0; i < llistaUsuaris.size(); i++) {
                System.out.println(i);
                Usuari u = llistaUsuaris.get(i);
                System.out.println(u.getUsuari());
                model.addUsuari(u);
           }      
           
           try {
              ArrayList<Perfil> llistaPerfils = conexion.getLlistaPerfils();
              combo_perfils = new JComboBox();
              combo_perfils.setBounds(220,325, 150, 30 );
              Perfil pe = new Perfil();
              pe.setPerfil(TDSLanguageUtils.getMessage("Users.SelectPerfil"));
              pe.setId(0);
              combo_perfils.addItem(pe);
              for(int i = 0; i < llistaPerfils.size(); i++) {
                System.out.println(i);
                Perfil p = llistaPerfils.get(i);
                System.out.println(p.getPerfil());
                combo_perfils.addItem(p);
              }
           } catch (RemoteException e) {
               e.printStackTrace();
           } catch (SQLException e) {
               e.printStackTrace();               
           }

           
           /* Tallers */
           
           
           try {
              ArrayList<Taller> llistaTallers = conexion.getLlistaTallers();

              combo_tallers.setBounds(390,325,150, 30 );
              Taller ta = new Taller();
              ta.setNom(TDSLanguageUtils.getMessage("Users.SelectTaller"));
              ta.setId(0);
              combo_tallers.addItem(ta);
              for(int i = 0; i < llistaTallers.size(); i++) {
                System.out.println(i);
                Taller t = llistaTallers.get(i);
                //System.out.println(t.getNom());
                combo_tallers.addItem(t);
              } 
           } catch (RemoteException e) {
               e.printStackTrace();
           } catch (SQLException e) {
               e.printStackTrace();               
           }
           
        final JTable taulaUsuaris = new JTable(model);     
        final JScrollPane scrollTaula = new JScrollPane(taulaUsuaris);
        scrollTaula.setBounds(50,100,500,150);
        
        txt_cercar = new JTextField();
        txt_cercar.setBounds(50,325, 150, 30 );
        
        // Afegim el botó nou usuari
        btn_add = new JButton();
        btn_add.setText(TDSLanguageUtils.getMessage("Users.NuevoUser"));
        btn_add.setBounds(40, 450, 150, 40);
        
        // Afegim el botó edició
        
        btn_edit = new JButton();
        btn_edit.setText(TDSLanguageUtils.getMessage("Users.Editar"));
        btn_edit.setBounds(200, 450, 150, 40);
        
     
         // Afegim el botó nou usuari
        btn_del = new JButton();
        btn_del.setText(TDSLanguageUtils.getMessage("Users.Borrar"));
        btn_del.setBounds(360, 450, 150, 40);
        
        
        // Botó de cerca
        
       btn_cercar = new JButton();
       btn_cercar.setText(TDSLanguageUtils.getMessage("Users.Buscar"));
       btn_cercar.setBounds(100, 375, 400, 40);
        
        
        /* Listener del botó afegir */
         this.btn_add.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent paramAnonymousActionEvent)   {

                GestionConexionEditUser g = new GestionConexionEditUser(conexion);
                    g.nou();
                    g.setVisible(true);
                    g.setBounds(0,0,400,700);
                    Principal.setContentInternalFrame(g,TDSLanguageUtils.getMessage("Users.NuevoUser"));
                    
            };
         });
        
        
        
        
        
        
        /* Listener del botó editar */
         this.btn_edit.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent paramAnonymousActionEvent)   {

                
                int columna = 0;
                int fila = taulaUsuaris.getSelectedRow();

                
               if(fila<0) {
                   Principal.showError(TDSLanguageUtils.getMessage("Users.NoSelectUser"));
               } else {
                    Object o = taulaUsuaris.getValueAt(fila, columna);
                    System.out.println(o);
                    
                    int id = Integer.parseInt(o.toString());
               
                    GestionConexionEditUser g = new GestionConexionEditUser(conexion);
                    g.edicio(id);
                    g.setVisible(true);
                    g.setBounds(0,0,400,700);
                    
                    Principal.setContentInternalFrame(g,TDSLanguageUtils.getMessage("Principal.EdicionUsuario"));
                    
                    
               }
                
            };
         });
        

        /* Listener del botó esborrar */
         this.btn_del.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent paramAnonymousActionEvent)   {
                
                int columna = 0;
                int fila = taulaUsuaris.getSelectedRow();

               
                
               if(fila<0) {
                   Principal.showError(TDSLanguageUtils.getMessage("Principal.NoSelectUser"));
               } else {
                    Object o = taulaUsuaris.getValueAt(fila, columna);
                    
                    int id = Integer.parseInt(o.toString());
               
                    try {
                    conexion.delUser(id);
                    } catch(RemoteException e) {
                        e.printStackTrace();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
               }
            };
            });
         
         
         this.btn_cercar.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent paramAnonymousActionEvent)   {
                resultatCerca = new ArrayList<Usuari>();
                String text = txt_cercar.getText();
                Taller t = (Taller)combo_tallers.getSelectedItem();
                Perfil p = (Perfil)combo_perfils.getSelectedItem();
              
                int quantes = model.getRowCount();
                
                try {
                    resultatCerca = conexion.cercarUsuaris(text, t, p);

                   
                    /* Empty table */
                    
                    for(int i = model.getRowCount() - 1; i > -1; i--) {
                        model.removeRow(i);
                    }
                    
                    
                    for(int i = 0; i < resultatCerca.size(); i++) {
                        model.addUsuari(resultatCerca.get(i));
                    }
                
                } catch (RemoteException e) {
                    e.printStackTrace();
                }   catch (SQLException e) {
                    e.printStackTrace();
                } 
                
            };
         });
 
         // taula.set
        
         listUsersWindow.add(scrollTaula);
         listUsersWindow.add(lbl_titol);
         listUsersWindow.add(btn_edit);
         listUsersWindow.add(btn_add);
         listUsersWindow.add(btn_del);
         listUsersWindow.add(btn_cercar);
         listUsersWindow.add(txt_cercar);
         listUsersWindow.add(combo_perfils);
         listUsersWindow.add(combo_tallers);
         this.add(listUsersWindow);
         
         /* Catch del primer try */
        } catch (RemoteException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
 }
